﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RaygunDiplomacy.Entities
{
   public partial class Descriptor
   {
      static Dictionary<string, Descriptor> descriptors = new Dictionary<string, Descriptor>();

      public static Descriptor GetDescriptor(string name)
      {
         AddDescriptor(name);

         return descriptors[name];
      }

      public static void AddDescriptor(string name)
      {
         if (!descriptors.ContainsKey(name))
         {
            descriptors.Add(name, new Descriptor(name));
         }
      }

      public static IEnumerable<Descriptor> GetDescriptors()
      {
         foreach (var descriptor in descriptors.Values)
         {
            yield return descriptor;
         }
      }

      public static IEnumerable<Descriptor> GetDescriptors(Predicate<Descriptor> filter)
      {
         if (filter == null)
         {
            throw new ArgumentNullException("filter");
         }

         foreach (var descriptor in descriptors.Values)
         {
            if (filter(descriptor))
            {
               yield return descriptor;
            }
         }
      }
   }
}